<?php
/*
*Script de connexion a la base de données*
*@Project: ABC MANAGEMENT PORTAL*
*@Author: Amy Thomas
*@Date : jeudi 7 août 2008, 12:09:52 (UTC+0200)
*/


class Connector_Sql{


	/*
	* Propriétés
	*/

	private $serveur = 'localhost'; //Nom du serveur
	private $user = 'ABC';		//Utilisateur
	private $pass = '';	//MDP	
	private $db =  'ABC_MANAGE';	//Nom de la bdd
	

	/*
	*  Méthodes
	*/

	//constructeur
	public function __construct(){
	
	}


	//Connexion a la bdd
	public function connect ()
	{
		mysql_connect($this->serveur,$this->user,$this->pass)or die('connexion imposible');
		mysql_select_db($this->db);

	}


	//Deconnexion de la BDD
	public function deconnect()
	{
		mysql_close();
	}

	
	/*
	*Fonction ajout de machine dans un groupe
	*@argu : (groupe,nom de machine, @mac de la machine)
	*/
	public function Add_machine($Group,$Machine_Name,$Mac_ADR,$mail,$mdp,$compte,$commentaire,$type)
	{
		/*
		*AJOUT DANS RSYNC
		*/
		//Execution de la commande python d'ajout de machine
		$Ret = exec("sudo python ../Scripts/groupes.py addcomp ".$Group." ".$Machine_Name." ".$Mac_ADR." ");

		/*
		*Ajout Dansla BDD
		*/
		//Creation de la date formater pour l'insertion dans la BDD
		$date = date('Y-m-d');
		//Ajout dans la bdd
		
		$result = mysql_query("INSERT INTO MACHINES (NOMGRP,NOMMACHINE,USERS,ADR_MAC,ADR_MAIL,TYPE,DATE_CREATION,COMMENTAIRE) VALUES ('$Group','$Machine_Name','$compte','$Mac_ADR','$mail','$type','$date','$commentaire')");	

		/*
		*Création des fichier mdp xml pour l'interface web
		*/
		//On reformate le nom de compte pour enlever le / servant a l'indexation
		$compte = str_replace("/","",$compte);
		//Buffer contenant le fichier xml
		$temp ="<xml version=\"1.0\" encoding=\"iso-8859-15\" ?>\n";
		$temp .="<root> \n";
		$temp .="<login>".$compte."</login>\n";
		$temp .="<pass>".$mdp."</pass> \n";
		$temp .="</root>";
		//Le fichier xml de config dans pass
		$PATH = '../pass/';
		$file = $Machine_Name.'_'.$compte.'.xml';
		//On ecrit le tout
		$handle = fopen($PATH.$file,'wb');
		fwrite($handle,$temp);
		fclose($handle);

		/*
		*Création des fichier xml pour le daemon client
		*dans le home/conf de l'utilisateur RsyncConf
		*/

		//Buffer contenant le fichier xml

		$buffer = "<?xml version=\"1.0\" encoding=\"iso-8859-15\"?> \n";
		$buffer .= "<root> \n";
		$buffer .= "<configuration> \n";
		$buffer .= "<options> -rltgoD --delete-after -z </options> \n";
		$buffer .= "<intervalle>30</intervalle> \n";
		$buffer .= "<timerOn>1</timerOn> \n";
		$buffer .= "<repertoires> \n";
		$buffer .= "</repertoires> \n";
		$buffer .= "<SFiles>0</SFiles>\n";
		$buffer .= "<profiles> \n";
		$buffer .= "</profiles> \n";
		$buffer .= "</configuration> \n";
		$buffer .= "</root> \n";
		
		$chemin = '../tmp/';
		$xml = $Machine_Name.'_'.$compte.'.xml';
		
		//On ecrit le tout
		$hand = fopen($chemin.$xml,'wb');
		fwrite($hand,$buffer);
		fclose($hand);
		$cmd = 'sudo cp /var/www/tmp/'.$xml.' /home/RsyncConf/conf/';
		$cmd2='sudo chmod -R 777 /home/RsyncConf';
        
        
		exec($cmd);
        exec ($cmd2);

	}
	
	/*
	*Fonction de creation d'un nouveau groupe
	*@argu : (nom_groupe,mdp synchro,mdp restau' commentaire)
	*/


	public function Add_groupe($Name,$MDP_SYNC,$MDP_RESTAU,$Com)
	{
	/*
	*AJOUT DANS RSYNC
	*/
	//Execution de la commande python d'ajout de machine
	$Ret = exec("sudo python ../Scripts/groupes.py addgrp ".$Name." ".$MDP_SYNC." ".$MDP_RESTAU." ");
	$NOMBRE = 0; // Pour initialiser le nombre de machine du groupe a 0
	/*
	*Ajout Dansla BDD
	*/
	//Creation de la date formater pour l'insertion dans la BDD
	$date = date('Y-m-d');
	//Ajout dans la bdd
	$result = mysql_query("INSERT INTO GROUPE (NOMGRP,MDP_SYNC,MDP_RESTAU,DATE_CREATION,NOMBRE,COMMENTAIRE) VALUES ('$Name','$MDP_SYNC','$MDP_RESTAU','$date','$NOMBRE','$Com')");	
		
	}

	/*
	*Fonction de suppression d'un groupe
	*@argu : (nom_groupe,)
	*/

	public function Del_Groupe($groupe){

	$Ret = exec("sudo python /var/www/Scripts/groupes.py delgrp ".$groupe." ");

	$result = mysql_query("DELETE FROM GROUPE WHERE NOMGRP='".$groupe."' ");

	}
	
	/*
	* Fonction de création de  la liste des 
	* groupes pour un menu déroulant a sélection.
	*/
	public function List_Group()
	{
		$index = 0;
		//Requete de selection des Nom de groupe
		$Query = "SELECT NOMGRP FROM GROUPE";
		$Requete = mysql_query($Query)or die ('Erreur de requete');
		//Création du tableau de retour
		
		
			while ($Tab = mysql_fetch_assoc($Requete))
				{
				echo '<OPTION VALUE="'.$Tab['NOMGRP'].'"><a>'.$Tab['NOMGRP'].'</a></OPTION>';
				$index++;
				}
			
		return $index;
		
	}	


	/*
	*Fonction qui incrémente ou décremente
	*le champs nombre pour un groupe donné
	*@param: groupe et opérande
	*/
	public function Nbr_membre($groupe,$operande){
	
	$nbr = mysql_query('SELECT NOMBRE FROM GROUPE WHERE NOMGRP = "'.$groupe.'"')or die ('Erreur de requete'); 
	$Tab = mysql_fetch_assoc($nbr);
	//echo $Tab['NOMBRE'];
	
	//Si l'op�rande est a +
	if ($operande == '+'){
		
		$query = mysql_query('UPDATE GROUPE SET NOMBRE=NOMBRE+1 WHERE  NOMGRP = "'.$groupe.'"');
	
	}
	
	//Si l'operande est a moins
	else if ($operande == '-'){
	
		$query = mysql_query('UPDATE GROUPE SET NOMBRE=NOMBRE-1 WHERE  NOMGRP = "'.$groupe.'"');
		
	}
	
	}
	

	/*
	*Fonction qui incrémente ou décremente
	*le champs nombre de licence
	*@param: opérande
	*/
	public function NBR_LICENCE($operande){
	
	$nbr = mysql_query('SELECT NOMBRE FROM SERVEUR  WHERE  TYPE = "licence"')or die ('Erreur de requete'); 
	$Tab = mysql_fetch_assoc($nbr);
	//echo $Tab['NOMBRE'];
	
	//Si l'op�rande est a +
	if ($operande == '+'){
		
		$query = mysql_query('UPDATE SERVEUR SET NOMBRE=NOMBRE+1 WHERE  TYPE = "licence"');
	
	}
	
	//Si l'operande est a moins
	else if ($operande == '-'){
	
		$query = mysql_query('UPDATE SERVEUR SET NOMBRE=NOMBRE-1 WHERE  TYPE = "licence"');
		
	}
	
	}


	/*
	*Fonction qui renvoie le nombre de licence
	*
	*@param: groupe 
	*/

	public function LICENCE(){

	$nbr = mysql_query('SELECT * FROM SERVEUR  WHERE  TYPE = "licence"')or die ('Erreur de requete');
	$value = mysql_fetch_assoc($nbr);
	$nombre = $value['NOMBRE'];
	return $nombre; 

	}


	/*
	*Fonction qui renvoie le nombre de membre d'un groupe
	*on compte le nombre de membre directement dans la colonne machine
	*@param: groupe 
	*@return: nombre de membre
	*/

	public function Is_empty($group){

	$req = mysql_query('SELECT * FROM MACHINES WHERE NOMGRP = "'.$group.'"')or die ('Erreur de requete');
	$value = mysql_fetch_assoc($req);
	$nombre = mysql_num_rows($req);
	return $nombre; 

	}

	

	/*
	*Fonction sui compte le nombre de groupe sur le serveur
	*/

	public function nbr_groupe(){

	$nbr = mysql_query('SELECT DISTINCT count( NOMGRP ) FROM GROUPE ')or die  ('Erreur de requete');
	$value = mysql_fetch_assoc($nbr);
	$nombre = $value['count( NOMGRP )'];
	return $nombre;
	}
	
	/*
	*Fonction qui construit un buffer contenant la liste 
	*des machines d'un groupe donné
	*@param : goupe
	*/

	public function member_group($group)
	{
		$query= "SELECT * FROM MACHINES WHERE NOMGRP= '".$group."'";
		$Requete = mysql_query($query)or die ('Erreur de requete');
			/*
			*Creation d'un tableau (json)avec les machines du goupe
			*On passe le tableau de la requete 
			*dans des boucles pour creer des colonnes et des rows
			*/

			$buffer =  " 'id': '".$group."',\n'txt' : '<b>".$group."</b>',\n'items' : [ { ";

			
	while ($Tab = mysql_fetch_assoc($Requete))
		{
		$com = $Tab['COMMENTAIRE'];
		/*
		*passage commande systeme
		*/

		//Path de l'utilsateur
		$home_SYNC = '/home/'.$Tab['NOMGRP'].'';
		//$home_save = '/home/'.$Tab['NOMGRP']."/sauvegarde/".$Tab['NOMMACHINE'].'_'.$Tab['USERS'].'';	
		
		$df_handle = popen("du -sh ".$home_SYNC."", "r");
		$df_SYNC = fgets($df_handle,2096);
		pclose($df_handle);
		$df_SYNC = str_replace("	".$home_SYNC."\n"," ",$df_SYNC);
		


		 $buffer.=" 'id' : '".$Tab['NOMMACHINE']."','txt' : '".$Tab['NOMMACHINE']."', ";
			/*On regarde le type de l'enregistrement pour lui attribuer
			*L'image qui lui correspond

			*/
			if($Tab['TYPE']=='Desktop'){$buffer.="'img':'desktop.png' ,";}
			else if($Tab['TYPE']=='Laptop'){$buffer.="'img':'Laptop.png',";}
			else{$buffer.="'img':'serveur.png',";}
		$buffer.="'tooltip':'<center><b><font color=\"#BA9700\">Date de creation</font></b><br \><i>".$Tab['DATE_CREATION']."</i><br \><b><font color=\"#BA9700\">Type</font></b><br \><i>".$Tab['TYPE']."</i><br \><b><font color=\"#BA9700\">@Mac</font></b><br \><i>".$Tab['ADR_MAC']."</i><br \><b><font color=\"#BA9700\">User(s)</font></b><br \><i>".$Tab['USERS']."</i><br \><b><font color=\"#BA9700\">@Mail</font></b><br \><i>".$Tab['ADR_MAIL']."</i><br \><b><font color=\"#BA9700\">Commentaire</font></b><br \><i>".$com."</i><br \></center>'},{";


			
		}
		$buffer.= "} \n]";
		return $buffer;
	}

	/*
	*Fonction qui construit un buffer contenant la liste 
	*des machines des groupes
	*Afin de crééer un objet JSON pour un affichage en tree
	*/

	public function List_Group_Tree()
	{
		$index = 0;
		//Requete de selection des Nom de groupe
		$Query = "SELECT NOMGRP FROM GROUPE";
		$Requete = mysql_query($Query)or die ('Erreur de requete');
		//Création du tableau de retour
		
		$buff =  " \n var struct = [ \n {\n 'id' : 'Groupes', \n 'txt':'<b><u>Serveur</b></u>','tooltip':'<font color=\"#76FF64\">Racine du serveur</font>','imgopen':'globe.gif',\n 'items' :[{";
		
			while ($Tab = mysql_fetch_assoc($Requete))
			{
		
			$buff .= $this->member_group($Tab['NOMGRP']);
			$buff .= "},{";
			}

		$buff .= "}\n] \n ";
		return $buff;


	}	

	/*
	*Fonction qui renvoie une liste avec les membre d'un groupe
	*avec une checkbox
	*@param: groupe 
	*/

	public function List_Member($groupe){

		$index = 0;
		//Requete de selection des Nom de groupe
		$Query = mysql_query('SELECT * FROM MACHINES WHERE NOMGRP = "'.$groupe.'"')or die ('Erreur de requete');
		//echo "on est la";
		//$Requete = mysql_query($Query)or die ('Erreur de requete');
		//Création du tableau de retour
		
			echo "<div align=\"left\">";
			while ($Tab = mysql_fetch_assoc($Query))
				{
				echo "<input type=\"checkbox\" name=\"user[]\" value=\"".$Tab['NOMMACHINE']."\"    align = 'left'>".$Tab['NOMMACHINE']."<br \> \n";
				$index ++;
				}
			echo "</div>";
		
		return $index;

	}

	/*
	*Fonction qui renvoie une liste avec les membre d'un groupe
	*avec une checkbox
	*@param: groupe 
	*/

	public function Select_Member($groupe){

		$index = 0;
		//Requete de selection des Nom de groupe
		$Query = mysql_query('SELECT * FROM MACHINES WHERE NOMGRP = "'.$groupe.'"')or die ('Erreur de requete');
		//echo "on est la";
		//$Requete = mysql_query($Query)or die ('Erreur de requete');
		//Création du tableau de retour
		
		
			while ($Tab = mysql_fetch_assoc($Query))
				{
				echo '<OPTION VALUE="'.$Tab['NOMMACHINE'].'"><a>'.$Tab['NOMMACHINE'].'</a></OPTION>';
				$index ++;
				}
			
		
		return $index;

	}


	/*Fonction de suppression d'un membre d'un groupe
	*
	*@param: groupe et nom de machine 
	*/

	public function Del_User($groupe,$machine){

	$Ret = exec("sudo python /var/www/Scripts/groupes.py delcomp ".$groupe." ".$machine." ");
	
	$result = mysql_query("DELETE FROM MACHINES WHERE NOMGRP='".$groupe."' AND NOMMACHINE='".$machine."' ");

	//Le fichier xml de config dans pass pour la suppression
	$PATH = '../pass/';
	$file = $machine.'_*';

	$df_handle = popen("rm -rf ".$PATH.$file."","r");
	pclose($df_handle);


	//On supprime aussi le fichier de conf de l'utilisateur
	$Xml_path = '/home/RsyncConf/conf/';
	$xml_handle = popen("rm -rf ".$Xml_path.$file."","r");
	pclose($xml_handle);
	}


	/*
	*
	*Fonction qui va recupere la liste des user d'un machine
	*@Return : La liste des utilisateurs d'une machines
	*
	*/

	public function Get_User($groupe,$user){

	$result = mysql_query("SELECT * FROM MACHINES WHERE NOMGRP='".$groupe."' AND NOMMACHINE='".$user."' ");
	$value = mysql_fetch_assoc($result);
	
	return $value['USERS'];
	

	}
	/*
	*
	*Fonction qui verify si un utilisateur existe avant sa suppression
	*@Return : 1 si l'utilisateur n'existe pas, et 0 si il existe
	*
	*/

	public function Verif_User($groupe,$user){
	
	$result = mysql_query("SELECT * FROM MACHINES WHERE NOMGRP='".$groupe."' AND NOMMACHINE='".$user."' ");
	$value = mysql_fetch_assoc($result);
	if ($value == ""){ return 1 ;} else { return 0; }
	}
	
	/*
	*
	*Fonction qui verify si une adresse mac existe avant sa suppression
	*@Return : 1 si l'utilisateur n'existe pas, et 0 si il existe
	*
	*/
	public function Verif_Mac($mac){
		$result = mysql_query("SELECT * FROM MACHINES WHERE ADR_MAC='".$mac."' ");
	$value = mysql_fetch_assoc($result);
	if ($value == ""){ return 1 ;} else { return 0; }

	}


	/*
	*
	*Fonction qui verify si un goupe n'existe pas deja avant sa creation
	*@Return : 1 si l'utilisateur n'existe pas, et 0 si il existe
	*
	*/
	public function Verif_GRP($grp){
		$result = mysql_query("SELECT * FROM GROUPE WHERE NOMGRP='".$grp."' ");
	$value = mysql_fetch_assoc($result);
	if ($value == ""){ return 1 ;} else { return 0; }

	}


	/*
	*Fonction qui renvoie une liste avec les membre d'un groupe
	*pour l('index du serveur
	*@param: groupe 
	*/

	public function index_Member($groupe){

		$index = 0;
		//Requete de selection des Nom de groupe
		$Query = mysql_query('SELECT * FROM MACHINES WHERE NOMGRP = "'.$groupe.'"')or die ('Erreur de requete');

		//Création du tableau de retour
		
			$buf = "<h1>".$groupe."</h1> \n <p></p>";
			while ($Tab = mysql_fetch_assoc($Query))
				{
			if($Tab['TYPE']=='Desktop'){$buf.="<img src='images/desktop.png' alt='Type:Deskop'>";}
			else if($Tab['TYPE']=='Laptop'){$buf.="<img src='images/Laptop.png' alt='Type:Laptop'>";}
			else{$buf.="<img src='images/serveur.png' alt='Type:Serveur'>";}
				$buf .= '     <a href="Classe/Resume_Machine.php?name='.$Tab['NOMMACHINE'].'&grp='.$groupe.'" title="'.$groupe.'" onclick="return GB_showPage(\''.$Tab['NOMMACHINE'].'\', this.href)">'.$Tab['NOMMACHINE'].'</a><br \>';

				}
			$buf .='</div>  ';
		return $buf;
	}

	/*
	*
	*Pages index.php
	*On va lister les groupes
	*Puis les membres des groupes
	*et faire un div 
	*@Return : 1 si l'utilisateur n'existe pas, et 0 si il existe
	*
	*/
	function index_serveur(){

		//Requete de selection des Nom de groupe
		$Query = "SELECT NOMGRP FROM GROUPE";
		$Requete = mysql_query($Query)or die ('Erreur de requete');
	

		/***
		*Formatage de la page html dans un buffer
		***/
	
		$buf = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

	<head>
		<meta content="text/html; charset=UTF-8" http-equiv="content-type"/>
		<link rel="stylesheet" href="../css/ABC.css" type="text/css" />
	    <script type="text/javascript">
        var GB_ROOT_DIR = "./js/greybox/greybox/";
    </script>

    <script type="text/javascript" src="./js/greybox/greybox/AJS.js"></script>
    <script type="text/javascript" src="./js/greybox/greybox/AJS_fx.js"></script>
    <script type="text/javascript" src="./js/greybox/greybox/gb_scripts.js"></script>
    <link href="./js/greybox/greybox/gb_styles.css" rel="stylesheet" type="text/css" media="all" />



		<script src="../js/jquery.js" type="text/javascript"></script>

		<!--Effet de fadein au chargement-->
		<script type="text/javascript">
		$(document).ready(function(){
			$("#stylized").fadeIn(500);
		});
		</script>


		<title>Index Serveur ABC BAckup Concept</title>
	</head>

  <body>
	<center>


	
			  ';
		
			while ($Tab = mysql_fetch_assoc($Requete))
			{
			$buf .=' <table><TR><TD>
	  <div id="stylized" class="myform">';
			$buf .= $this->index_Member($Tab['NOMGRP']);

			
			}
			echo $buf;

	}

	
	/*
	*Fonction permet d'ajouter un utilisateur
	*A une machine deja existante
	*/

	function add_user_computer($groupe,$machine,$user,$mdp){
	

	// On va chercher la liste des user deja existant
	$lst_user = $this->Get_User($groupe,$machine);
	//On concatene avec les nouvelle utilisateur
	$user_add = ''.$lst_user.$user.'/';
	
	// On UPDATE la chanp sql
	$Query = mysql_query("UPDATE MACHINES SET USERS='".$user_add."' WHERE NOMMACHINE='".$machine."' and NOMGRP='".$groupe."' ") or die ('Erreur de requete');


		/*
		*Création des fichier mdp xml pour l'interface web
		*/
		//On reformate le nom de compte pour enlever le / servant a l'indexation
		$compte = str_replace("/","",$user);
		//Buffer contenant le fichier xml
		$temp ="<xml version=\"1.0\" encoding=\"iso-8859-15\" ?>\n";
		$temp .="<root> \n";
		$temp .="<login>".$compte."</login>\n";
		$temp .="<pass>".$mdp."</pass> \n";
		$temp .="</root>";
		//Le fichier xml de config dans pass
		$PATH = '../pass/';
		$file = $machine.'_'.$compte.'.xml';
		//On ecrit le tout
		$handle = fopen($PATH.$file,'wb');
		fwrite($handle,$temp);
		fclose($handle);


		/*
		*Création des fichier mdp xml pour l'interface web
		*/
		//On reformate le nom de compte pour enlever le / servant a l'indexation
		$compte = str_replace("/","",$compte);
		//Buffer contenant le fichier xml
		$temp ="<xml version=\"1.0\" encoding=\"iso-8859-15\" ?>\n";
		$temp .="<root> \n";
		$temp .="<login>".$compte."</login>\n";
		$temp .="<pass>".$mdp."</pass> \n";
		$temp .="</root>";
		//Le fichier xml de config dans pass
		$PATH = '../pass/';
		$file = $Machine_Name.'_'.$compte.'.xml';
		//On ecrit le tout
		$handle = fopen($PATH.$file,'wb');
		fwrite($handle,$temp);
		fclose($handle);

		/*
		*Création des fichier xml pour le daemon client
		*dans le home/conf de l'utilisateur RsyncConf
		*/

		//Buffer contenant le fichier xml

		$buffer = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n";
		$buffer .= "<root> \n";
		$buffer .= "<configuration> \n";
		$buffer .= "<options> -rltgoD --delete-after -z </options> \n";
		$buffer .= "<intervalle>30</intervalle> \n";
		$buffer .= "<timerOn>1</timerOn> \n";
		$buffer .= "<repertoires> \n";
		$buffer .= "</repertoires> \n";
		$buffer .= "<SFiles>0</SFiles>\n";
		$buffer .= "<profiles> \n";
		$buffer .= "</profiles> \n";
		$buffer .= "</configuration> \n";
		$buffer .= "</root> \n";
		
		$chemin = '../tmp/';
		$xml = $machine.'_'.$user.'.xml';
		
		//On ecrit le tout
		$hand = fopen($chemin.$xml,'wb');
		fwrite($hand,$buffer);
		fclose($hand);
		$cmd = 'sudo cp /var/www/tmp/'.$xml.' /home/RsyncConf/conf/';
		
		exec($cmd);

	}


	/*
	*Verification du login/mdp pour le compte admin
	*/

	public function auth_admin($login,$pass){
        $q_login = mysql_query("SELECT login, mdp   FROM SERVEUR") or die;
 	$value = mysql_fetch_assoc($q_login);

	if ($login == $value['login'] and $pass == $value['mdp']){return 1;}
		else{return 0;}
				

	}


	/*
      * on renvoie le groupe pour une machine passee en param 
	*/

	public function auth_user($machine){
        $usr = mysql_query("SELECT * FROM MACHINES WHERE NOMMACHINE='".$machine."' ") or die;
        $value = mysql_fetch_assoc($usr);

	return $value['NOMGRP'];

	}

	/*
	*Destructeur
	*/
	
   public function chg_pass_admin($pass){
    /*
     *Changement du mot de passe admin
    */
    
    		$result = mysql_query('UPDATE SERVEUR SET mdp="'.$pass.'"');	


}
    
    public function __destruct()
	{

	}


}
?>
